import os

import bleach
import markdown
from django.contrib.staticfiles import finders
from django.http import HttpResponse, FileResponse, Http404
from django.shortcuts import render
from django.utils.safestring import mark_safe


def Hello(request):
    return HttpResponse("Hello World!")


def Asriel(request):
    context = {}
    return render(request, 'index.html', context)


def Article(request):
    articles = [
        {'id': 'QuickSort', 'title': '快速排序（Quick Sort）'},
        {'id': 'MergeSort', 'title': '归并排序（MergeSort）'},
        {'id': 'KMP', 'title': 'KMP字符串匹配优化算法'},
        {'id': 'linux_nohup', 'title': 'Linux系统后台运行脚本方法'},
        {'id': 'DP_ClimbingStairs', 'title': '动态规划入门 - 爬楼梯问题'},
    ]
    downloads = [
        {'id': 'NQueens.zip', 'title': '八皇后问题（回溯法、N皇后）'},
        {'id': '遗传算法.docx', 'title': '遗传算法（Genetic Algorithm，GA）'},
        {'id': '个人所得税计算.zip', 'title': '个人所得税计算'},
        {'id': 'Dijkstra最短路径算法.zip', 'title': 'Dijkstra最短路径算法(动态规划)'},
        {'id': '【CentOS】将脚本添加到系统启动项.docx', 'title': '[CentOS]将脚本添加到系统启动项'},
        {'id': 'SQL函数Decode和CaseWhen的用法.docx', 'title': '[SQL]函数Decode和CaseWhen的用法'},
    ]
    return render(request, 'article_list.html', {'articles': articles, 'downloads': downloads})


def read_markdown(request, article_id):
    # # 获取当前文件路径
    # current_dir = os.path.dirname(os.path.abspath(__file__))
    # # 构建Markdown文件路径
    # md_file_path = os.path.join(current_dir, 'your-markdown-file.md')

    # 使用staticfiles finders来查找静态文件的真实路径
    md_file_path = finders.find(f'docs/{article_id}.md')
    if not md_file_path:
        # 如果没有找到文件，可以返回一个404或其它错误信息
        HttpResponse("404 Markdown file not found.")
        # return render(request, 'error.html', {'message': 'Markdown file not found.'})

    # 读取Markdown文件内容
    with open(md_file_path, 'r', encoding='utf-8') as file:
        md_content = file.read()

    # 将Markdown转换为HTML
    # html_content = markdown.markdown(md_content)
    html_content = markdown.markdown(md_content, extensions=['markdown.extensions.attr_list'])

    # 清理HTML内容以防止XSS攻击
    # clean_html_content = bleach.clean(html_content)
    clean_html_content = html_content

    # # 返回响应给模板
    # return render(request, 'article.html', {
    #     'content': mark_safe(clean_html_content)  # 标记为安全，避免自动转义
    # })
    # 返回响应给模板
    return render(request, 'article.html', {
        'content': mark_safe(clean_html_content),  # 标记为安全，避免自动转义
        'title': article_id  # 你可以根据需要传递更多上下文数据
    })


def download_article(request, filename):
    # 使用staticfiles finders来查找静态文件的真实路径
    file_path = finders.find(f'docs/downloads/{filename}')
    if not file_path:
        # 如果没有找到文件，可以返回一个404或其它错误信息
        # HttpResponse("404 Markdown file not found.")
        raise Http404('文件未找到')
        # return render(request, 'error.html', {'message': 'Markdown file not found.'})

    # 打开文件并返回FileResponse，as_attachment=True表示这是个附件，浏览器会提示下载而不是直接打开
    response = FileResponse(open(file_path, 'rb'), as_attachment=True)
    return response
